部署企业内部的 goproxy.io 服务

说明

  • 通常情况下,我们可以直接使用七牛云阿里云华为云腾讯云等云厂商提供的GOPROXY代理服务。

  • 受限于企业环境,很多时候希望能直接在企业内部就可以访问到GOPROXY服务。

  • 操作系统使用CentOS-7.7-1908

安装

准备编译环境

  • Golang
  • make
  • git

编译

1
2
3
git clone https://github.com/goproxyio/goproxy.git
cd goproxy
make

编译好的二进制文件是放在./bin/goproxy,使用 ./bin/goproxy -h 查看参数使用说明:

1
2
3
4
5
6
7
8
9
Usage of ./bin/goproxy:
-cacheDir string
go modules cache dir [指定 Go 模块的缓存目录]
-exclude string
exclude host pattern [proxy 模式下指定哪些 path 不经过上游服务器]
-listen string
service listen address [服务监听端口,默认 8081]
-proxy string
next hop proxy for go modules [指定上游 proxy server,推荐 goproxy.io]

配置systemd脚本

拷贝二进制文件

1
cp ./bin/goproxy /usr/local/bin/goproxy

创建GOPROXY缓存目录

1
mkdir -p /opt/goproxy

配置systemd

1
vim /usr/lib/systemd/system/goproxy.service

添加以下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[Unit]
Description=goproxy Service
After=network.target
Wants=network.target

[Service]
User=root
Type=simple
PIDFile=/var/run/goproxy.pid
ExecStart=/usr/local/bin/goproxy -cacheDir=/opt/goproxy -proxy=https://goproxy.io -listen=0.0.0.0:8081 -exclude=git.example.com
Restart=on-failure
RestartSec=60
# Don't restart in the case of configuration error
RestartPreventExitStatus=23

[Install]
WantedBy=multi-user.target

启动服务

1
2
systemctl enable goproxy.service
systemctl start goproxy.service

测试验证

在本地开发机上,通过环境变量将 proxy server 指定到你刚部署的服务器:

Mac 和 Linux 用户:

1
2
export GO111MODULE=on
export GOPROXY=http://[你的服务器IP]:8081

Windows 用户:

1
2
$env:GO111MODULE="on"
$env:GOPROXY="http://[你的服务器IP]:8081"

测试拉代码

1
go get github.com/pkg/errors

服务器上看日志输出

1
journalctl -u goproxy.service -f
1
2
Mar 04 11:42:35 izj6ce5zfgk1il1jke0te7z goproxy[1308]: goproxy.io: ------ --- /github.com/pkg/errors/@v/v0.9.1.mod [proxy]
Mar 04 11:42:35 izj6ce5zfgk1il1jke0te7z goproxy[1308]: goproxy.io: 0.035s 200 /github.com/pkg/errors/@v/v0.9.1.mod